package io.fivefire.base.common.service;

import io.fivefire.base.common.enums.SqlOrderEnum;

import java.util.List;
import java.util.Map;

public interface IBaseService <T>{
    /**
     * 新增一条数据
     *
     * @param entity
     */
    public int insert(T entity);


    /**
     * 修改一条数据
     *
     * @param entity
     *            要更新的实体对象
     */
    public int edit(T entity);

    /**
     * 删除一条数据
     *
     * @param baseEntity
     */
    public int delete(T baseEntity);


    /**
     * 删除一条数据
     *
     * @param id
     */
    public int delete(Long id, Class<T> classz);
    /**
     * 根据条件集合进行分页查询
     *
     * @param condition
     *            查询条件
     * @param offset
     *            偏移
     * @param rows
     *            查询条数
     * @return 返回Pager对象
     */
    public List<T> listByPage(Map<String, Object> condition, int offset, int rows);
    public List<T> listByPage(Map<String, Object> condition, int offset, int rows, String orderBy, SqlOrderEnum sqlOrderEnum);


    /**
     * 更新对象,如果属性为空，则不会进行对应的属性值更新
     *
     * @param entity
     *            要更新的实体对象
     */
    public int update(T entity);


    public int updateByMap(T entity, Map<String, Object> entityMap);



    public List<T> findList(Map<String, Object> condition);
    public List<T> findList(Map<String, Object> conditione, String orderBy, SqlOrderEnum sqlOrderEnum);

    /**
     * 根据传入的泛型参数类型查询该类型对应表中的所有数据，返回一个集合对象
     *
     * @return 返回泛型参数类型的对象集合
     */
    public List<T> findAll();
    public List<T> findAll(String orderBy, SqlOrderEnum sqlOrderEnum);


    /**
     * 根据任意属性和属性值进行对象模糊查询
     * @param condition
     * @return
     */
    public List<T> like(Map<String, Object> condition);
    public List<T> like(Map<String, Object> condition, String orderBy, SqlOrderEnum sqlOrderEnum);


    /**
     * 根据条件集合进行指定类型单一对象查询
     *
     * @param condition
     *            进行查询的条件集合
     * @return 返回泛型参数类型的对象
     */
    public T queryOne(Map<String, Object> condition);
    public T queryOne(Map<String, Object> condition, String orderBy, SqlOrderEnum sqlOrderEnum);

    /**
     * 根据条件进行数量的查询
     *
     * @param condition
     * @return 返回符合条件的泛型参数对应表中的数量
     */
    public int count(Map<String, Object> condition);



    public T selectOne(T entity);


    public int updateByExampleSelective(T entity, Map<String, Object> condition);


}
